#include <iostream>
#include <regex>

// void AnalysisHttpRequest(const std::string &src)
// {
// }

int main()
{
    // std::string src = "GET /gfhdsh/sss/login?usr=xiao&pass HTTP1.1\r\n";
    std::string src = "Get /gfhdsh/sss/login HTTP/1.1\n";

    std::smatch outputstr;
    // std::regex matchrule("/number/(\\d+)");
    // ()内部表示要匹配的字符
    // [^x]表示不匹配x
    // 代表匹配任意字符
    // *代表匹配0次或多次
    // +代表匹配一次或多次
    //  \\?(.*)- 这里用，表示从？的下一个位置开始匹配一次或多次任意字符，直到遇到-结束
    // ?: 匹配但是不捕捉
    // ？代表匹配0次或一次
    std::regex matchrule("(GET|DELETE|PUT|HEAD|POST) ([^?]*)(?:\\?(.*))? (HTTP/1\\.[01])(?:\r|\n|\r\n)?", std::regex::icase);

    // 在整个字符串里搜索符合条件的子串
    // bool ret = std::regex_search(src, outputstr, matchrule);
    // 字符串必须以src开头去匹配，匹配不到就出错
    bool ret = std::regex_match(src, outputstr, matchrule);
    if (!ret)
        return -1;
    for (auto &str : outputstr)
        std::cout << str << std::endl;

    return 0;
}